package com.demarc.pesquisas.negocio.util;

import org.apache.commons.lang3.StringUtils;

public class MascaraUtils {

	public static final char MASCARA_CHAR_ALFANUMERICO = '*';
	public static final char MASCARA_CHAR_NUMERICO_9 = '9';
	public static final char MASCARA_CHAR_NUMERICO_0 = '0';
	public static final String MASCARA_STRING_NUMERICO_0 = "0";

	public static String formatar(String valor, String mascara) {
		StringBuilder valorFormatado = new StringBuilder();
		int cont = 0;

		if (StringUtils.isBlank(mascara)) {
			valorFormatado.append(valor);
		} else {
			for (int i = 0; i < mascara.length(); i++) {
				if ((mascara.charAt(i) == MASCARA_CHAR_ALFANUMERICO
						|| mascara.charAt(i) == MASCARA_CHAR_NUMERICO_9 || mascara
						.charAt(i) == MASCARA_CHAR_NUMERICO_0)
						&& cont < valor.length()) {
					valorFormatado.append(valor.charAt(cont));
					cont++;
				} else if (cont >= valor.length()) {
					break;
				} else {
					valorFormatado.append(mascara.charAt(i));
				}
			}
		}
		return valorFormatado.toString();
	}

	public static String formatarCPF(String cpf) {
		return formatar(cpf, "999.999.999-99");
	}

	public static String removerFormato(String string) { // NOPMD
		if (string != null) {
			string = StringUtils.remove(string, ".");
			string = StringUtils.remove(string, "/");
			string = StringUtils.remove(string, "-");
			string = StringUtils.remove(string, "+");
			string = StringUtils.remove(string, "(");
			string = StringUtils.remove(string, ")");
			string = StringUtils.remove(string, " ");
		}
		return string;
	}

	/**
	 * Retorna boolean indicando que Email é válido.
	 * 
	 * @param email
	 *            email para validação.
	 * @return boolean
	 */
	public static boolean isEmailValido(String email) {
		return email
				.matches("^[\\w-_\\.+]*[\\w-_\\.]\\@([\\w-_]+\\.)+[\\w]+[\\w]$");
	}
}
